package com.ljx.thread.thread04;

import java.util.Arrays;

/**
 * @author LJX
 * @Description: TODO
 * @Date: 2022/11/1 15:12
 * @Version 1.0
 */
public class ThreadSafeTest {
	private static  String[] arr=new String[2];
	private static int index=0;
	public static void main(String[] args) {

		Thread t1 = new Thread(new Runnable() {
			/**
			 *以下程序可能会出现线程安全问题
			 */
			@Override
			public void run() {
				if (arr[index]==null){
					// 比如 下标为0时，t1线程执行到此被t2线程抢去了资源
					// t2线程执行完毕，并在下标为0出赋值为word，线程t1又抢回了资源，又将继续此处向下执行
					// 将下标为0出重新赋值为hello
					arr[index]="hello";
					index++;
				}
			}
		});

		Thread t2 = new Thread(new Runnable() {
			@Override
			public void run() {
				if (arr[index]==null){
					arr[index]="word";
					index++;
				}
			}
		});

		t1.start();
		t2.start();

		try {
			t1.join();
			t2.join();

		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		/**
		 * 不能直接输出，因为打印在主线程上，主线程和t1,t2线程在争抢资源
		 * 所以我们要先合并到主线程，让t1,t2线程先执行完
		 */
		System.out.println(Arrays.toString(arr));
	}
}
